package Request

import (
	"database/sql/driver"
	"fmt"
	"strings"
)

type MenuRequest struct {
	Title string `form:"size:32"`
	Page  int    `form:"page"`
	Size  int    `form:"size"`
	Sort  string `form:"sort"`
}

type ImageSort struct {
	ImageID uint `json:"image_id"`
	Sort    int  `json:"sort"`
}

//根据您提供的代码片段，Abstract 字段的类型为 `ArticleArray`，该类型实现了 `Scan` 和 `Value` 方法。这意味着在与数据库交互时，`ArticleArray` 类型的字段可以自动进行解析和值转换。
//当从数据库中检索数据时，`Scan` 方法将自动调用并将数据库中的值转换为 `ArticleArray` 类型。在 `Scan` 方法内部，它将接收到的值转换为 `[]byte` 类型，然后根据需要将其拆分并转换为 `ArticleArray` 类型。
//当将数据保存到数据库时，`Value` 方法将根据需要将 `ArticleArray` 类型的字段转换为数据库所需的表示形式。在该方法中，`ArticleArray` 类型的字段将使用指定的分隔符进行连接，并作为字符串返回。
//因此，通过这种方式，`Abstract` 字段将能够进行自动解析和值转换。

type ArticleArray []string

func (t *ArticleArray) Scan(value interface{}) error {
	fmt.Println("自动调用SCAN?")
	v, _ := value.([]byte)

	if string(v) == "" {
		*t = []string{}
		return nil
	}
	*t = strings.Split(string(v), "\n")
	return nil
}

func (t ArticleArray) Value() (driver.Value, error) { // 将数字转黄为值
	return strings.Join(t, "\n"), nil
}

type MenuCreateRequest struct {
	ID            uint         `json:"id"`
	MenuTitle     string       `json:"menu_title" binding:"required" msg:"请输入标题" structs:"title"`
	MenuTitleEn   string       `json:"menu_title_en" structs:"menu_title_en"`
	Slogan        string       `json:"slogan" binding:"required" msg:"请输入slogan" structs:"slogan"`
	Abstract      ArticleArray `json:"abstract" structs:"abstract"`               // 简介
	AbstractTime  int          `json:"abstract_time" structs:"abstract_time"`     //简介切换时间
	ImageSortList []ImageSort  `json:"image_sort_list" structs:"image_sort_list"` // 菜单图片列表
	BannerTime    int          `json:"banners_time" structs:"banners_time"`       // 菜单切换时间 0 不切换
	Sort          int          `json:"sort" structs:"sort"`                       // 菜单的顺序
}

type MenuDelRequest struct {
	Ids []uint `json:"ids"`
}

type MenuEditRequest struct {
	Id    uint   `uri:"id" binding:"required" msg:"id"`
	Title string `json:"title" binding:"required" msg:"输入名称"`
}
